break on random level select read (FFFFFFFF)

7F010D78:
LW	V0,B07C (V0)	[V0=8002B07C=FFFFFFFF]
BGEZ	V0,7F010DD0
NOP
JAL	7000A450
NOP

7000A450:
LUI	A0,8002
LD	A0,4460 (A0)	[A0=80024460=00000000-057DC330]
LUI	AT,8002
DSLL32	A2,A0,0x1F	[A2=0]
DSLL	A1,A0,0x1F	[A1=2BEE1998-00000000]
DSRL	A2,A2,0x1F	[A2=0]
DSRL32	A1,A1,0x0	[A1=00000000-2BEE1998]
DSLL32	A0,A0,0xC	[A0=C3300000-00000000]
OR	A2,A2,A1	[A2=00000000-2BEE1998]
DSRL32	A0,A0,0x0	[A0=00000000-C3300000]
XOR	A2,A2,A0	[A2=00000000-E8DD1998]
DSRL	A0,A2,0x14	[A0=00000000-00000E8D]
ANDI	A0,A0,0FFF	[A0=0E8D]
XOR	A0,A0,A2	[A0=E8DD1715]
DSLL32	V0,A0,0x0	[V0=E8DD1715-00000000]
SD	A0,4460 (AT)	[80024460=A0=00000000-E8DD1715]
JR	RA
DSRA32	V0,V0,0x0	[V0=E8DD1715]

7F010D8C:
ADDIU	AT,R0,000B	[AT=000B]
DIVU	V0,AT
MFHI	V1		[V1=5]
SLL	T0,V1,0x2	[T0=14]
SUBU	T0,T0,V1	[T0=F]
SLL	T0,T0,V1	[T0=78]
LUI	T1,8003
ADDU	T1,T1,T0	[T1=80030078]
LW	T1,B094 (T1)	[T1=8002B10C=2E]
LUI	AT,8003
ADDIU	A0,V1,0001	[A0=6]
JAL	7F0100D0
SW	T1,A8F4 (AT)	[8002A8F4=2E]

anyway, it goes on from here, but that was all to get a stage number...

for weapons, it would almost be better to get a number that is pseudo-random (like a time counter or VI reg) and just mask it.

-----------------------------------------
DISPLAY weapon routine!
(3b363c...)

7F0C65F8:	(3065f8)
3C0E8005	LUI	T6,8005
8DCE9160	LW	T6,9160 (T6)	[T6=80049160=0B; selection]
3C188005	LUI	T8,8005
271890F0	ADDIU	T8,T8,90F0	[T8=800490F0]
000E78C0	SLL	T7,T6,0x3	[T7=58]
03E00008	JR	RA
01F81021	ADDU	V0,T7,T8	[V0=address=80049148 (ROCKETS)]

etc...

!!!!!!!!!!!!!!!!!!!!!
Load!  weapon routine
ref: 8004ef30 - 8004ef50
hits them in order:
8004ef30
so, just jump out at 8004ef30, do something, grab the next flag and jump to it
...7f002850
LW	T6,EF30 (AT)	[T6=8004EF30+offset]
JR	T6
NOP


7F002870:
JAL	7F0C6614
SW	A3,002C (SP)

7F0C6614:
LUI	T6,8005
LW	T6,9160 (T6)	[T6=80049160=selected weapon=B]
LUI	V0,8005
SLL	T7,T6,0x3	[T7=58]
ADDU	V0,V0,T7	[V0=80050058]
JR	RA
LW	V0,90F4 (V0)	[V0=8004914C=80048EB0]


7F002878:


-------------------
here's my routine
selects between 0-D (1-D if not first slot...)


8C2E9160	LW	T6,9160 (T7)	[T6=80049160=selected weapon]
15C00008	BNEZ	T6,+6		[skip this routine otherwise]
3C0E8002	LUI	T6,8002

8DCE30F4	LW	T6,30F4 (T6)	[load pseudo-random number]
31CE000F	ANDI	T6,T6,0xF	[T6 is 0-F]
2DC2000D	SLTI	V0,T6,000D	[if T6<D V0=TRUE]
54400002	BNEL	V0,R0,+X
	25CE0001	ADDIU	T6,T6,0001	[T6 is 1-10]
	
000E7042	SLL	T6,T6,0001

AC2E9160	SW	T6,9160 (T7)

	//branch here to end routine
8C2EEF34	LW	T6,EF34 (T7)	[T6=8004EF34+offset]
01C00008	JR	T6
00000000	NOP

810490F0 9C9A
8104EF30 8040
8104EF32 0000
8104EF38 8040
8104EF3A 0000

81400000 3C0F
81400002 8005
81400004 8DEE
81400006 9160
81400008 15C0
8140000A 0008
8140000C 3C0E
8140000E 8002
81400010 8DCE
81400012 30F4
81400014 31CE
81400016 000F
81400018 2DC2
8140001A 000D
8140001C 5440
8140001E 0002
81400020 25CE
81400022 0001
81400024 000E
81400026 7042
81400028 ADEE
8140002A 9160
8140002C 8DEE
8140002E EF34
81400030 01C0
81400032 0008
81400034 0000
81400036 0000
